package mx.itesm.escenas;

import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.input.touch.TouchEvent;

import mx.itesm.constants.ConstantesEscenas;
import mx.itesm.manejadores.ManejadorEscenas;
import mx.itesm.escenas.EscenaElegirNivel;


public class EscenaGanaste extends EscenaBase {
	
	/*
	 * **************************************************************
	 *                                         Variables
	 * **************************************************************
	 */

	private static final int ORIGEN = ConstantesEscenas.ORIGEN;

	/*
	 * **************************************************************
	 *                                         Metodos
	 * **************************************************************
	 */
	
	@Override
	public void crearEscena() {
		attachChild(createSprite(ORIGEN, ORIGEN, manejadorRecursos.fondoGanasteRegion, 
				mVerticesObjetos));
		
		// Crea el boton de Menu y lo agrega a la escena
		ButtonSprite botonMenu = new ButtonSprite(250, 200, 
				manejadorRecursos.botonMenuRegion, mVerticesObjetos) {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) {
					ManejadorEscenas.getInstance().cargarEscenaMenu();
					ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_MENU);
					ManejadorEscenas.getInstance().descargarEscenaGanaste();
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		// Crea el boton de Volver a Jugar y lo agrega a la escena
		ButtonSprite botonVolverJugar = new ButtonSprite(400, 200, 
				manejadorRecursos.botonVolverJugarRegion, mVerticesObjetos) {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) {
					switch (EscenaElegirNivel.nivelActual) {
					case 1:
						ManejadorEscenas.getInstance().cargarEscenaNivel1();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV1);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
						break;
					case 2:
						ManejadorEscenas.getInstance().cargarEscenaNivel2();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV2);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
						break;
					case 3:
						ManejadorEscenas.getInstance().cargarEscenaNivel3();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV3);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
					default:
						break;
					}
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		// Crea el boton de Salir y lo agrega a la escena
		ButtonSprite botonSigNivel = new ButtonSprite(550, 200, 
				manejadorRecursos.botonSigNivelRegion, mVerticesObjetos) {

			// Se ejecuta cada vez que el usuario hace tap sobre el boton
			@Override
			public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
					float pTouchAreaLocalX, float pTouchAreaLocalY) {

				if (pSceneTouchEvent.isActionDown()) {
					switch(EscenaElegirNivel.nivelActual) {
					case 1:
						ManejadorEscenas.getInstance().cargarEscenaNivel2();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV2);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
						EscenaElegirNivel.nivelActual = 2;
						break;
					case 2:
						ManejadorEscenas.getInstance().cargarEscenaNivel3();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_LV3);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
						EscenaElegirNivel.nivelActual = 3;
						break;
					case 3:
						ManejadorEscenas.getInstance().cargarEscenaMenu();
						ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_MENU);
						ManejadorEscenas.getInstance().descargarEscenaGanaste();
						break;
					default:
						break;
					}
				}
				return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
						pTouchAreaLocalY);
			}
		};
		
		this.registerTouchArea(botonMenu);
		this.attachChild(botonMenu);
		
		this.registerTouchArea(botonVolverJugar);
		this.attachChild(botonVolverJugar);
		
		this.registerTouchArea(botonSigNivel);
		this.attachChild(botonSigNivel);
	}

	@Override
	public TipoEscena getTipoEscena() {
		return TipoEscena.ESCENA_GANASTE;
	}

	@Override
	public void removerEscena() {
		this.detachSelf();
		this.dispose();
	}

	@Override
	public void onBackKeyPressed() {
		ManejadorEscenas.getInstance().cargarEscenaLoading();
		ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_CARGAR);
		ManejadorEscenas.getInstance().descargarEscenaGanaste();
		
		engine.registerUpdateHandler(new TimerHandler(0.2f, new ITimerCallback() {

			@Override
			public void onTimePassed(final TimerHandler pTimerHandler) {

				engine.unregisterUpdateHandler(pTimerHandler);
				ManejadorEscenas.getInstance().cargarEscenaMenu();
				ManejadorEscenas.getInstance().setEscena(TipoEscena.ESCENA_MENU);
			}
		}));
	}
}